Virtual machines can be provided in a computer to enhance flexibility and performance. A virtual machine typically refers to some arrangement of components (software and/or hardware) for virtualizing or emulating an actual computer, where the virtual machine can include an operating system and software applications. Virtual machines can allow different operating systems to be deployed on the same computer, such that applications written for different operating systems can be executed in different virtual machines (that contain corresponding operating systems) in the same computer. Moreover, the operating system of a virtual machine can be different from the host operating system that may be running on the computer on which the virtual machine is deployed.
In addition, a greater level of isolation is provided between or among applications running in different virtual machines. In some cases, virtual machines also allow multiple applications to more efficiently share common hardware resources (processing resources, input/output or I/O resources, and storage resources) of the computer. Such sharing of hardware resources is performed by virtualizing the hardware resources with an entity such as a hypervisor.
When a hypervisor virtualizes hardware resources, access requests by virtual machines for the hardware resources are handled through the hypervisor. However, an issue associated with virtualizing hardware resources is reduced performance associated with the overhead of performing virtualization of hardware resources. Such performance reduction may be unacceptable for certain applications. To address this, hypervisors allow some virtual machines to have direct input/output (I/O) control of hardware resources. However, an issue associated with providing direct I/O control of hardware resources is that virtual machines that have such direct I/O control cannot be efficiently live migrated from one physical machine to another physical machine without causing errors.